#include <iostream>
#include <vector>

template<typename T>
void func(T&&)
{
    std::cout << "void func(T&&)" << std::endl;
}

template<typename T>
void func2(const T&&)
{
    std::cout << "void func2(const T&&)" << std::endl;
}

template<typename T>
void func3(std::vector<T>&&)
{
    std::cout << "void func3(std::vector<T>&&)" << std::endl;
}

int main() {
    int a = 10;
    func(a);
    func(10);

    {
        // func<int>(a);
        // func2(a);
    }

    {
        auto&& rri = 10;

        auto&& ra = a;

        decltype(rri) r_rri = 20;
    }

    return 0;
}